package Day_0224.NetWork;

/**
 * @author zxc
 * @date 2023/02/24 10:28
 **/
public class TCP_Build {
    public static void main(String[] args) {
        /**
         * 谈一谈对于TCP三次握手的详细理解
         * ===》
         * TCP协议提供可靠的数据传输服务，即通过"三次握手"，来实现建立TCP连接;
         * ==>
         * 所谓三次握手（Three-Way Handshake）：即,建立TCP连接，
         * 就是指建立一个TCP连接时，需要客户端和服务端总共发送3个包，以确认TCP连接的建立;
         * 一，客户端向服务端请求建立TCP连接
         * 1.第一次握手 ：
         * （1）客户端向服务器发送 SYN包（syn = a），同时客户端进入到SYN_SEND状态，等待服务器确认;
         * （2）SYN：同步序列编号(Synchronize Sequence Numbers)
         *
         * 2.第二次握手
         * （1）服务器接收到客户端所发送的SYN包，需要确认客户发送的SYN包（ack = a + 1）;
         * （2）同时，服务器也向客户端发送SYN包（syn = b），同时服务器进入SYN_RECV状态，等待客户端的确认;
         *
         * 3.第三次握手
         * （1）客户端接收到服务器所发送的ACK + SYN包，同时向服务端发送确认包（ack = b + 1），客户端直接进入ESTABLISHED状态;
         * （2）当服务器接收到客户端的ACK包时，服务器也会进入到ESTABLISHED状态;
         *
         * ===>
         * 即，TCP连接的成功建立，基于客户端和服务端都能够确认 自身和对方能够发送和接收消息;
         *
         * 二，三次握手的不安全性
         * 1.SYN洪泛攻击
         * 服务器处于SYN_Wait的状态 ：
         * 1）伪装的IP，向服务器发送一个SYN请求建立连接，然后服务器向该IP回复SYN和ACK，
         * 但是找不到该IP对应的主机，当超时时服务器收不到ACK会重复发送。
         * ===》
         * 当大量的攻击者请求建立连接时，服务器就会存在大量未完成三次握手的连接，服务器主机backlog被耗尽而不能响应其它连接。
         * 即，SYN泛洪攻击（属于DOS的一种，发送大量的半连接请求，耗费CPU和内存资源，引起网络堵塞甚至系统瘫痪）
         *
         * 2）防范措施：
         * （1）降低SYN timeout时间，使得主机尽快释放半连接的占用
         * （2）采用SYN cookie设置，如果短时间内连续收到某个IP的重复SYN请求，则认为受到了该IP的攻击，丢弃来自该IP的后续请求报文
         * （3）在网关处设置过滤，拒绝将一个源IP地址不属于其来源子网的包进行更远的路由
         *
         * 3）当一个主机向服务器发送SYN请求连接，服务器回复ACK和SYN后，攻击者截获ACK和SYN。
         * 然后伪装成原始主机继续与服务器进行通信。
         *
         * ===》
         * 总结 ：
         * （1）伪装IP，向服务器发送大量建立TCP连接请求，由于IP不存在，无法对于服务器的SYN + ACK进行响应，
         *  从而导致大量TCP半连接的存在，占用大量服务器资源;
         * （2）伪装原始主机，和服务器进行通信 ：
         *  即，通过截取服务端发送的 SYN + ACK包，伪装成原始主机和服务器进行通信;
         *
         * 2，DOS攻击 拒绝服务攻击
         * 1）DDoS（分布式拒绝服务攻击）
         * 2）DOS攻击利用合理的服务请求占用过多的服务资源，使正常用户的请求无法得到相应。
         * 3）常见的DOS攻击有计算机网络带宽攻击和连通性攻击。
         * （1）带宽攻击，指以极大的通信量冲击网络，使得所有可用网络资源都被消耗殆尽，最后导致合法的用户请求无法通过。
         * （2）连通性攻击，指用大量的连接请求冲击计算机，使得所有可用的操作系统资源都被消耗殆尽，最终计算机无法再处理合法用户的请求。
         *
         * 3.死亡值ping
         * 许多操作系统的TCP/IP协议栈规定ICMP包大小为64KB（网间控制报文），且在对包的标题头进行读取
         * 之后，要根据该标题头里包含的信息来为有效载荷生成缓冲区。
         * ”死亡值ping”就是故意产生畸形的测试ping包，声称自己的尺寸超过ICMP上限，也就是加载的尺寸超过
         * 64KB上限，使未采取保护措施的网络系统出现内存分配错误，导致TCP/IP协议栈崩溃，最终接收方宕
         * 机。
         *
         *
         *
         */
    }
}
